package br.com.treinamento.gestaoExperienciaProfissional.controller;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.treinamento.gestaoExperienciaProfissional.model.ExperienciaProfissional;
import br.com.treinamento.gestaoExperienciaProfissional.model.Pessoa;
import br.com.treinamento.gestaoExperienciaProfissional.service.PessoaService;
import br.com.treinamento.gestaoExperienciaProfissional.util.FacesUtil;

import com.google.common.base.Strings;


@ManagedBean
@ViewScoped
public class PessoaController implements Serializable {

    private static final long serialVersionUID = 8301865434469950945L;
    
    private PessoaService pessoaService = new PessoaService();

    private List<Pessoa> pessoas;
    private Pessoa pessoa;
    
    @PostConstruct
    public void init() {
    	if(isAlteracao()) {
    		alterarPessoa();
    	} else {
    		novaPessoa();
    	}  
    }
    
    private boolean isAlteracao() {
    	String idPessoa = FacesUtil.getRequestParameter("idPessoa");
		return !Strings.isNullOrEmpty(idPessoa);
	}
    
    private void alterarPessoa() {
		Integer id = Integer.valueOf(FacesUtil.getRequestParameter("idPessoa"));
		pessoa = pessoaService.buscar(id);
	}
    
    private void novaPessoa(){
    	pessoa = new Pessoa();
    }
    
    public void excluir(Pessoa p){
    	pessoaService.excluir(p);
    	atualizarPessoas();
    	FacesUtil.mostrarMensagemSucesso("pessoa.excluida.sucesso");
    }

	private void atualizarPessoas() {
		setPessoas(pessoaService.listar());
	}

	public String save() {   
    	pessoaService.salvar(this.pessoa);
    	FacesUtil.mostrarMensagemSucesso("msg.cadastro.sucesso");
    	return "/paginas/pessoa/listarPessoa";
    }
	
	public String atualizar() {   
    	pessoaService.atualizar(pessoa);
    	FacesUtil.mostrarMensagemSucesso("pessoa.alterar.sucesso");
    	return "/paginas/pessoa/listarPessoa";
    }
	

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public List<Pessoa> getPessoas() {
		
		if(pessoas == null){
			atualizarPessoas();
		}
		return pessoas;
	}

	public void setPessoas(List<Pessoa> pessoas) {
		this.pessoas = pessoas;
	}
	
	 public void excluirExperiencia(ExperienciaProfissional experiencia){
	    	this.pessoa.removerExperienciaProfissional(experiencia);
	    	FacesUtil.mostrarMensagemSucesso("experiencia.excluida.sucesso");
	    }
	
}
